package com.oxchinx.product.controller;

import com.oxchinx.product.VO.ProductCategoryVO;
import com.oxchinx.product.VO.ProductInfoVO;
import com.oxchinx.product.VO.ResultVO;
import com.oxchinx.product.dto.CartDTO;
import com.oxchinx.product.model.ProductCategory;
import com.oxchinx.product.model.ProductInfo;
import com.oxchinx.product.service.ProductCategoryService;
import com.oxchinx.product.service.ProductInfoService;
import com.oxchinx.utils.ResultVOUtil;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpServletRequest;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

/**
 * Created by dell on 2018/5/21.
 */


@RestController
@RequestMapping("/product")
public class ProductController {
    @Autowired
    private ProductInfoService productInfoService;
    @Autowired
    private ProductCategoryService productCategoryService;
//* 1.查询所有在架的商品
// * 2.获取类目的type列表
// * 3.查询类目
// * 4.构造函数
    @GetMapping("/list")
    public ResultVO list(HttpServletRequest request){
        /** 1.查询所有在架的商品 */
        List<ProductInfo> productInfoList = productInfoService.findUpAll();
        /** 2.获取类目的type列表*/
        List<Integer> categoryTypeList = productInfoList.stream().map(ProductInfo::getCategoryType).collect(Collectors.toList());
        /** 3.查询类目*/
        List<ProductCategory> categoryList = productCategoryService.findByCategoryTypeIn(categoryTypeList);

        /** 构造数据 */
        List<ProductCategoryVO> productCategoryVOList = new ArrayList<>();
        for(ProductCategory productCategory:categoryList){
            ProductCategoryVO productCategoryVO = new ProductCategoryVO();
            productCategoryVO.setCategoryName(productCategory.getCategoryName());
            productCategoryVO.setCategoryType(productCategory.getCategoryType());

            List<ProductInfoVO> productInfoVOList = new ArrayList<>();
            for(ProductInfo productInfo:productInfoList){
                if(productInfo.getCategoryType().equals(productCategory.getCategoryType())){
                    ProductInfoVO productInfoVO = new ProductInfoVO();
                    /** 使用copy的方法，无需一个一个set了*/
                    BeanUtils.copyProperties(productInfo,productInfoVO);
                    productInfoVOList.add(productInfoVO);
                }
            }
            productCategoryVO.setProductInfoVOList(productInfoVOList);

            productCategoryVOList.add(productCategoryVO);
        }

        return ResultVOUtil.success(productCategoryVOList);
    }

    /**
     * 获取商品列表（给订单服务调用）
     */
    @PostMapping("/listForOrder")
    public List<ProductInfo>  listForOrder(@RequestBody List<String> productIdList){
        return productInfoService.findList(productIdList);
    }

    /**
     * 扣库存
     */
    @PostMapping("/decreaseStock")
    public void decreaseStock(@RequestBody List<CartDTO> cartDTOList){
         productInfoService.decreaseStock(cartDTOList);
    }

}
